import enum
import os
import datetime
import shutil

# 当前项目路径
PROJECT_PATH = os.path.dirname(__file__)
TODAY = datetime.datetime.now().strftime("%Y-%m-%d")
DEBUG = False  # 为 True 的时候，程序脚本每执行一个动作就需要手动按回车键进行下一步

# 存在 page 的目录
PAGE_DIR = os.path.join(PROJECT_PATH, "page")
# 存放 页面组件 的目录
COMPONENTS_DIR = os.path.join(PROJECT_PATH, "page_comps")
# 元素目录
ELEMENT_DIR = os.path.join(PROJECT_PATH, "page_elements")
# 测试数据目录
TEST_DATA_DIR = os.path.join(PROJECT_PATH, "data")


# 接收多个参数，最终拼接为元素yaml管理文件的最终路径
def join_element_path(*args):
    return os.path.join(ELEMENT_DIR, *args)


# 接收多个参数，最终拼接为测试数据yaml管理文件的最终路径
def join_testdata_path(*args):
    return os.path.join(TEST_DATA_DIR, *args)


# allure 服务的host与port，allure报告所在的位置
# git 会忽略空文件夹，本地report不推送进 gitee
if not os.path.exists((_report_dir := os.path.join(PROJECT_PATH, "report"))):
    os.mkdir(_report_dir)
if not os.path.exists((_allure_json_dir := os.path.join(_report_dir, "allure_json"))):
    os.mkdir(_allure_json_dir)
if not os.path.exists((_allure_report_dir := os.path.join(_report_dir, "allure_report"))):
    os.mkdir(_allure_report_dir)

ALLURE_HOST = "127.0.0.1"
ALLURE_PORT = "9999"
ALLURE_JSON_DIR = os.path.join(_allure_json_dir, TODAY)
ALLURE_REPORT_DIR = os.path.join(_allure_report_dir, TODAY)

# 日志
LOG_FMT = "%(levelname)-s %(asctime)s %(message)s"
LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"

if not os.path.exists((_log_path := os.path.join(PROJECT_PATH, "logs"))):
    os.mkdir(_log_path)
if not os.path.exists((INFO_LOG_PATH := os.path.join(_log_path, "info.log"))):
    open(INFO_LOG_PATH, "w").close()
if not os.path.exists((ERROR_LOG_PATH := os.path.join(_log_path, "error.log"))):
    open(ERROR_LOG_PATH, "w").close()

# 临时文件夹
TMP_DIR = os.path.join(PROJECT_PATH, "tmp")
shutil.rmtree(TMP_DIR, ignore_errors=True)
os.mkdir(TMP_DIR)

# 时间格式
TIME_FMT = "%Y/%m/%d"

# 函数引用模板字符串
FUNC_NAME = "func_name"
FUNC_PARAMS = "params"
FUN_BODY = "func_body"
QUOTE_FMT = r"\${(?P<%s>(?P<%s>[^${}]+?)\((?P<%s>[^${}]*?)\))}" % (FUN_BODY, FUNC_NAME, FUNC_PARAMS)


class HostEnv(enum.Enum):
    test = "https://ecloud.10086.cn/manager/#/"
    uat = "https://ecloud.10086.cn/manager/#/"
    production = "https://ecloud.10086.cn/"


HOST = HostEnv.production.value
